!  Specifically designed for Supra 56K modems by:
!			Brian Robison
!			Diamond Multimedia
!			Communications Divison
!			1997
!	
@ORIGINATE
@ANSWER
! 
ifstr 5 1 "0"
serreset 57600, 0, 8, 1
jump 2
!
@LABEL 1
serreset 38400, 0, 8, 1
!
@LABEL 2
hsreset 0 0 0 0 0 0
settries 0
!
!
matchclr
matchstr 1 3 "OK\13\10"
write "AT\13"
matchread 30
!
@LABEL 3
!
!
matchclr
matchstr 1 4   "OK\13\10"
matchstr 2 101 "ERROR\13\10"
write "AT&F1E0S95=45S7=150S0=0\13"
matchread 30
inctries
iftries 3 101
!
! Reset the Modem on setup failure
!
DTRClear
pause 5
DTRSet
flush
jump 3
!
!
@LABEL 4
ifstr 4 5 "1"
ifstr 4 5 "2"
!
!
matchclr
matchstr 1 9 "OK\13\10"
write "AT\\N0\13"
matchread 30
jump 101
!
!
@LABEL 5
! Varstring 5, compression protocol:
!    = 0, handled by computer 
!    = 1, handled by modem
ifstr 5 9 "1"
!
! Varstring 5 == 0, turn off compression protocol in modem.
matchclr
matchstr 1 9 "OK\13\10"
write "AT%C0\13"
matchread 30
jump 101
!
!
@LABEL 9
! Varstring 2, modem speaker:
!    = 0, speaker off
!    = 1, speaker on
ifstr 2 13 "1"
pause 5
matchclr
matchstr 1 13 "OK\13\10"
write "ATM0\13"
matchread 30
jump 101
!
! Modem ready, wait for a call or originate a call
!
@LABEL 13
ifANSWER 32
!
!
! ---- Originating a call ----
!
! Varstring 6, dialing mode:
!    = 0, normal dialing
!    = 1, blind dialing
!    = 2, manual dialing
!    otherwise dial as ARA version 1.0
ifstr 6 19 "0"
ifstr 6 17 "1"
ifstr 6 15 "2"
!
! Dialing for ARA version 1.0
note "Dialing ^1" 3
write "ATD^3^1\13
jump 32
!
@LABEL 15
! Display ASK dialog with message.  Goto label 107 if dialog canceled.
ASK 2 "Pick up the phone & dial ^1.  When the phone rings, click OK then hang up." 107
note "Manual dialing initiated" 3
! X1 to ignore dialtone & busy, D to dial, \^ generates data tone
write "ATX1D\13"
jump 32
!
@LABEL 17
note "Dialing without tone" 3
matchclr
matchstr 1 19 "OK\13\10"
write "ATX\13"
matchread 30
jump 101
!
!
!
@LABEL 19
! Display the full dialstring contained in Varstring 1
note "Dialing ^1" 3
!
! Varstrings 7, 8 and 9, contain dialstring fragments
!    Long phone numbers may need to be split into smaller groups
!    for the modem to use
!
! Varstring 3:  "p" for pulse & "t" for tone dialing
! Varstring 8 == blank (dialstring in varstring 7)
! Varstring 9 == blank (dialstring in varstrings 7 & 8)
! Otherwise (dialstring in varstrings 7, 8 & 9)
! \^ is added to the dialstring to force the modem to generate a data tone
ifstr 8 27 " "
ifstr 9 24 " "
!
!  Write dialstring in varstrings 7, 8 & 9
matchclr
matchstr 1 21 "OK\13\10"
write "ATD^3^7;\13"
matchread 400
jump 101

@LABEL 21
matchclr
matchstr 1 22 "OK\13\10"
write "ATD^3^8;\13"
matchread 400
jump 101

@LABEL 22
write "ATD^3^9\13"
jump 32
!
!
@LABEL 24
!  Write dialstring in varstrings 7 & 8
matchclr
matchstr 1 25 "OK\13\10"
write "ATD^3^7;\13"
matchread 400
jump 101

@LABEL 25
write "ATD^3^8\13"
jump 32
!
@LABEL 27
!  Write dialstring in varstring 7
write "ATD^3^7\13"
!
!
!    ---- Connection responce ----
!
! The following section will parse modem responces of two types:
!   1) CARRIER xxx, PROTOCOL: yyy, COMPRESSION: yyy, CONNECT xxx
!   2) CONNECT xxx/yyy
!
@LABEL 32
settries 0
@LABEL 33
matchclr
matchstr  1 81  "RING\13\10"
matchstr  2 102 "NO DIALTONE\13\10"
matchstr  3 103 "NO CARRIER"
matchstr  4 103 "ERROR\13\10"
matchstr  5 104 "BUSY\13\10"
matchstr  6 105 "NO ANSWER\13\10"
matchstr  7 35  "CONNECT"
matchstr  8 34  "CARRIER"
matchstr  9 62  "PROTOCOL: LAP"
matchstr 10 62  "PROTOCOL: MNP"
matchstr 11 62  "PROTOCOL: ALT"
matchstr 12 67  "COMPRESSION: V"
matchstr 13 67  "COMPRESSION: MNP5"
matchstr 14 67  "COMPRESSION: CLASS"
matchread 700
ifANSWER 32
jump 105
!
!  CARRIER parsing
!
@LABEL 34
jsr 38
inctries
jump 33
!
!  CONNECT parsing - do not parse rate if CARRIER seen
!
@LABEL 35
iftries 1 61
jsr 38
jump 61
!
!  Parse CONNECT/CARRIER rate subroutine
!    2400 and 4800 have two entries each
!    to distinguish them from 24000 and 48000
!
@LABEL 38
matchclr
matchstr  1 40 "2400\13"
matchstr  2 40 "2400/"
matchstr  3 41 "4800\13"
matchstr  4 41 "4800/"
matchstr  5 42 "7200"
matchstr  6 43 "9600"
matchstr  7 44 "12000"
matchstr  8 45 "14400"
matchstr  9 46 "16800"
matchstr 10 47 "19200"
matchstr 11 48 "21600"
matchstr 12 49 "24000"
matchstr 13 50 "26400"
matchstr 14 51 "28800"
matchstr 15 52 "31200"
matchstr 16 53 "33600"
matchstr 17 108 "32000"
matchstr 18 109 "34000"
matchstr 19 110 "36000"
matchstr 20 111 "38000"
matchstr 21 112 "40000"
matchstr 22 113 "42000"
matchstr 23 114 "44000"
matchstr 24 115 "46000"
matchstr 25 116 "48000"
matchstr 26 117 "50000"
matchstr 27 118 "52000"
matchstr 28 119 "54000"
matchstr 29 120 "56000"
matchread 10
jump 59
!
! -- Connection rates --
! CommunicatingAt informs ARA of the raw modem to modem
! connection speed.
!
@LABEL 40
note "Communicating at 2400 bps." 2
CommunicatingAt 2400
jump 60
!
@LABEL 41
note "Communicating at 4800 bps." 2
CommunicatingAt 4800
jump 60
!
@LABEL 42
note "Communicating at 7200 bps." 2
CommunicatingAt 7200
jump 60
!
@LABEL 43
note "Communicating at 9600 bps." 2
CommunicatingAt 9600
jump 60
!
@LABEL 44
note "Communicating at 12400 bps." 2
CommunicatingAt 12400
jump 60
!
@LABEL 45
note "Communicating at 14400 bps." 2
CommunicatingAt 14400
jump 60
!
@LABEL 46
note "Communicating at 16800 bps." 2
CommunicatingAt 16800
jump 60
!
@LABEL 47
note "Communicating at 19200 bps." 2
CommunicatingAt 19200
jump 60
!
@LABEL 48
note "Communicating at 21600 bps." 2
CommunicatingAt 21600
jump 60
!
@LABEL 49
note "Communicating at 24000 bps." 2
CommunicatingAt 24000
jump 60
!
@LABEL 50
note "Communicating at 26400 bps." 2
CommunicatingAt 26400
jump 60
!
@LABEL 51
note "Communicating at 28800 bps." 2
CommunicatingAt 28800
jump 60
!
@LABEL 52
note "Communicating at 31200 bps." 2
CommunicatingAt 31200
jump 60
! 
@LABEL 53
note "Communicating at 33600 bps." 2
CommunicatingAt 33600
jump 60
! 
@LABEL 108
note "Communicating at 32000 bps." 2
CommunicatingAt 32000
jump 60
! 
@LABEL 109
note "Communicating at 34000 bps." 2
CommunicatingAt 34000
jump 60
! 
@LABEL 110
note "Communicating at 36000 bps." 2
CommunicatingAt 36000
jump 60
! 
@LABEL 111
note "Communicating at 38000 bps." 2
CommunicatingAt 38000
jump 60
! 
@LABEL 112
note "Communicating at 40000 bps." 2
CommunicatingAt 40000
jump 60
! 
@LABEL 113
note "Communicating at 42000 bps." 2
CommunicatingAt 42000
jump 60
! 
@LABEL 114
note "Communicating at 44000 bps." 2
CommunicatingAt 44000
jump 60
! 
@LABEL 115
note "Communicating at 46000 bps." 2
CommunicatingAt 46000
jump 60
! 
@LABEL 116
note "Communicating at 48000 bps." 2
CommunicatingAt 48000
jump 60
! 
@LABEL 117
note "Communicating at 50000 bps." 2
CommunicatingAt 50000
jump 60
! 
@LABEL 118
note "Communicating at 52000 bps." 2
CommunicatingAt 52000
jump 60
! 
@LABEL 119
note "Communicating at 54000 bps." 2
CommunicatingAt 54000
jump 60
! 
@LABEL 120
note "Communicating at 56000 bps." 2
CommunicatingAt 56000
jump 60
!
@LABEL 59
note "Communicating at an unknown rate." 2
!
@LABEL 60
return
!
! Look for reliablilty and compression results 
! after the CONNECT rate.
!
@LABEL 61
matchclr
matchstr  1 63 "LAPM"
matchstr  2 63 "REL"
matchstr  3 63 "ARQ"
matchstr  4 68 "COMP/"
matchstr  5 68 "COMP\13"
matchstr  6 63 "V42/"
matchstr  7 63 "V42\13"
matchstr  8 68 "V42BIS"
matchstr  9 68 "V42bis"
matchstr 10 63 "MNP\13"
matchstr 11 68 "MNP5"
matchstr 12 70 "\10"
matchread 10
jump 70

! -- Modem error correction link negotiation --
! Userhook 2 informs ARA that a modem-to-modem error
! correcting protocol has been negotiated
!
!
@LABEL 62
note "Modem Reliable Link Established." 2
userhook 2
jump 33
!
@LABEL 63
note "Modem Reliable Link Established." 2
userhook 2
jump 61
!
! -- Compression negotiation --
! Userhook 3 informs ARA that a modem-to-modem compression
! protocol has been negotiated
!
@LABEL 67
note "Modem Compression Established." 2
userhook 3
jump 33
!
@LABEL 68
note "Modem Compression Established." 2
userhook 3
jump 61
!
!
! -- Normal exit after "CONNECT" --
!
!  This modem has been setup to do CTS handshaking,
!  and we assume that a CTS handshaking cable is being used.
!
@LABEL 70
! Turn on CTS handshaking.
HSReset 0 1 0 0 0 0
!
ifANSWER 71
pause 30
@LABEL 71
exit 0
!
!
! ---- Answer calls ----
!
!	A RING result from the modem and in ANSWERING mode
!	claims the serial port and answering the phone
!
@LABEL 81
ifORIGINATE 32
userhook 1
note "Answering phone..." 2
write "ATA\13"
jump 32
!
!
! ---- Hang up and reset modem ----
!
@HANGUP
@LABEL 90
settries 0
HSReset 0 0 0 0 0 0
!
@LABEL 92
!  Escape from data to command mode
matchclr
matchstr 1 96 "OK\13\10"
write "+++"
matchread 20
!
@LABEL 94
! Force a hangup
matchclr
matchstr 1 98 "NO CARRIER\13\10"
matchstr 2 98 "OK\13\10"
matchstr 3 98 "ERROR\13\10"
matchstr 4 98 "0\13\10"
write "ATH\13"
matchread 30
! 
! Try to get control of the modem by toggling DTR
DTRClear
pause 5
DTRSet
flush
!
! Try the hangup sequence three times otherwise declare and error
inctries
iftries 3 101
jump 92
!
@LABEL 96
! Pause between data and command mode
pause 50
jump 94
!
!
@LABEL 98
! Recall the factory settings
pause 15
matchclr
matchstr 1 99 "OK\13\10"
write "AT&F1\13"
matchread 30
jump 101
!
@LABEL 99
exit 0
!
! ---- Error messages -----
!
! Modem Not Responding
@LABEL 101
exit -6019
!
! No Dial Tone
@LABEL 102
exit -6020
!
! No Carrier or Error
@LABEL 103
exit -6021
!
! Busy
@LABEL 104
exit -6022
!
! No Answer
@LABEL 105
exit -6023
!
! User Cancellation
@LABEL 107
exit -6008
